import { observe } from "./observe/observe";
export function initSate(vm) {
  const opts = vm.$options; //  就是获取用户的配置
  if (opts.data) {
    initData(vm);
  }
}

function proxy(vm, target, key) {
    // vm VUe实例, target:_data ; key:data上属性名
  Object.defineProperty(vm, key, {
    // vm.name
    get() {
      return vm[target][key]; //vm._data.name
    },
    set(newVuale){
        vm[target][key] = newVuale
    }
  });
}

function initData(vm) {
  let data = vm.$options.data;
  // data 可能是函数或者对象
  data = typeof data === "function" ? data.call(vm) : data; // data是用户返回的对象
  vm._data = data; // 我将返回的对象放到_date上
  // 对数据进行劫持vue2 里面采用的
  observe(data);
  for (let key in data) {
    proxy(vm, "_data", key);
  }
}
